Спринт 3/18 → Тема 1/3: Самое необходимое об ООП → Урок 1/8
Парадигмы программирования
До сих пор вы работали над оформлением кода в проекте character_creation_module: описывали его по правилам с соблюдением стандарта PEP8. Всё это определяет принятый для этого проекта coding style, но не решает поставленную задачу — переписать код, используя принципы объектно-ориентированного программирования.
Прежде чем использовать эти принципы, нужно разобраться, что из себя представляет парадигма ООП. Приступим.
Императивное и декларативное программирование
Программист может решить одну и ту же задачу по-разному. Он самостоятельно выбирает подход к решению задачи в зависимости от ситуации, и такие подходы называют парадигмами программирования.
Парадигма определяет стиль написания программ и объединяет идеи и приёмы, которые направлены на решение поставленной задачи. Иначе говоря парадигма — это подход к программированию.
Существует множество разных парадигм, но чаще всего используются императивная и декларативная.
Императивная (англ. imperative — приказ) парадигма подразумевает, что разработчик пишет для компьютера инструкции, которым тот следует. Основные идеи императивной парадигмы таковы:
- код представляется в виде инструкций (команд);
- инструкции выполняются последовательно;
- данные, которые программа получает в ходе выполнения инструкций, могут записываться в память и извлекаться из неё другими инструкциями.
При использовании императивной парадигмы программист отдаёт компьютеру приказы, описывает, как нужно достичь результата, а компьютер эти приказы выполняет.
💡 Представьте, что вы просите друга сделать вам чай. Вы говорите другу: «Вскипяти, пожалуйста, чайник, возьми чашку, насыпь в неё чай, залей в чашку горячую воду, добавь две ложки сахара и размешай». Таким образом, вы описываете последовательность действий, даёте другу инструкции: Вскипяти чайник → Возьми чашку → Насыпь в чашку чай → Залей в чашку горячую воду → Добавь две ложки сахара → Размешай сахар в чашке. Это тоже своего рода императивное программирование. Только в роли компьютера здесь выступает ваш друг.
При использовании декларативной парадигмы программист описывает задачу, но не пишет никаких инструкций.
Код, написанный по принципам декларативной парадигмы, описывает, что нужно сделать, уточняя лишь детали.
💡 Вернёмся к другу, которого мы просили сделать чай. Декларативный подход постановки задачи будет выглядеть так: вы просто скажете «завари, пожалуйста, чай» и уточните пару деталей, например, чёрный или зелёный чай, две или три ложки сахара. А ваш друг примет эти условия и принесёт вам ароматный напиток.
С развитием программирования из этих двух подходов выросли новые подходы.
Парадигмы в Python
В большинстве современных языков программирования, как и в Python, возможно использование нескольких парадигм программирования. Такие языки называются мультипарадигменными.
Напишем простую программу, которая помогает получить сумму чисел из списка, используя сначала императивный подход, а потом декларативный.
Императивный подход
PYTHON
Декларативный подход, а именно — функциональный
PYTHON
Благодаря возможностям Python код можно сделать ещё проще:
PYTHON
Объектно-ориентированное программирование (ООП)
Объектно-ориентированная парадигма — это подвид императивной парадигмы.
В ООП на первом месте стоят объекты. Объект — это набор данных и функций. Объект можно представить в виде коробки с крышкой, в которой лежит кусок кода.
Программисты договорились, что данные внутри объекта будут называть свойствами (или полями), а функции — методами. Свойства представляют собой характеристики объекта, а методы — действия, которые умеет выполнять объект.
Каждый объект создаётся по шаблону. Такие шаблоны в ООП называют классами.
Это как эскиз, например, меча. Сам по себе эскиз ничего не делает, но по нему можно выковать меч и пользоваться им. Так и с классами: с их помощью создаются объекты, которые далее используются в работе.
Давайте используем силу примера.
В старой кузне замка есть эскиз меча. По этому эскизу кузнец может выковать практически любой меч. Например, двуручный стальной меч «Несокрушимый» длиной два метра или одноручный меч «Молния» из эльфийского железа длиной один метр.
Каждым из мечей можно наносить разные удары, а ещё их можно заточить.
Эскиз один, а мечи совершенно разные.
Если всё это перевести на язык ООП, то эскиз меча — это класс, а сам меч — это объект или, иначе, — экземпляр класса.
У этого объекта есть свойства:
- название,
- материал клинка,
- длина клинка,
- тип рукояти.
Также этот объект обладает методами:
- «нанести рубящий удар»,
- «выполнить укол»,
- «заточить клинок».
Объект — это сущность, которую можно описать и которая может что-то делать, то есть у которой есть поведение.
Что из перечисленного можно отнести к классам, а что к объектам?
Что в итоге
Только что вы познакомились с одной из основных парадигм мира разработки — объектно-ориентированным программированием. В вашем арсенале появились новые определения — классы, объекты, свойства и методы.